import { ref, inject } from 'vue'

// 存放已创建图层的状态 放在函数外部，让每个vue组件拿到的都是同一个layerList
// [{name: 'building', visible: true}, {name: 'roads', visible: false}]
let layerList = ref([])

// 图层管理函数
export function useCityLayers() {

  // 根据传入的图层名称显示图层
  function showLayerByName(scene, layerName) {
    if (!scene || !layerName) return
    const layer = scene.getLayerByName(layerName)
    layer.show()
  }
  // 根据传入的图层名称隐藏图层
  function hideLayerByName(scene, layerName) {
    if (!scene || !layerName) return
    const layer = scene.getLayerByName(layerName)
    layer.hide()
  }

  // 用传入的scene获取图层，更新layerList数据
  function updateLayerList(scene) {
    if (!scene) return
    const layers = scene.getLayers() // 获取所有图层
    layerList.value = layers.map(layer => {
      // 根据图层的isVisible()方法判断图层是否处于隐藏状态
      // visible属性会被缓存
      if (layer.isVisible()) {
        return { name: layer.name, visible: true }
      } else {
        return { name: layer.name, visible: false }
      }
    })
  }

  // 返回API给调用方
  return {
    layerList,
    showLayerByName,
    hideLayerByName,
    updateLayerList,
  }
}